---
title: PolicyInformation
summary: API reference for PolicyInformation.
status: draft
owner: SAIF Doc Gen
last_reviewed: 2026-08-21
library: SAIF.Business.Policy
reference_type: package
---

# PolicyInformation

`PolicyInformation` is the library's application-layer data accessor: a static class exposing scalar policy facts (dates, market type, premium-history set id, minimum premium, ownership system) through direct SQL and stored-procedure calls issued via `IPortalRequest`/`IDataRequest`, bypassing the BOF business-object pattern used elsewhere in this library.* This is the library's main technical-debt seam — a second, parallel data-access style alongside `clsHazardGroup`/`clsHazardGroupCollection`.*

## Purpose
- Resolve a policy's latest period effective date, expiration date, and anniversary rating date directly from `POLICY_PERIOD`/`POLICY_PERIOD_NON_WCIS` ([BR-POL-009](../../business-rules.md#br-pol-009-policy-effective-date-derivation), [BR-POL-010](../../business-rules.md#br-pol-010-dual-source-period-date-resolution)).
- Determine a policy's market type, current premium-history set id, information-page print status, minimum premium, and owning system, each via a dedicated scalar SQL or stored-procedure call ([BR-POL-004](../../business-rules.md#br-pol-004-market-type-code-classification), [BR-POL-005](../../business-rules.md#br-pol-005-policy-ownership-determination), [BR-POL-006](../../business-rules.md#br-pol-006-information-page-printed-status), [BR-POL-007](../../business-rules.md#br-pol-007-current-premium-history-set-selection), [BR-POL-008](../../business-rules.md#br-pol-008-minimum-premium-fail-soft-behavior)).
- Silently normalize several no-result conditions to safe sentinels (`0`) rather than raising, while other paths (e.g. `MaxPolicyEffectiveDate`, `IsInformationPagePrinted`) leave an unguarded `CDate`/`CDec` conversion that will throw on a null result.*

## Context
- Namespace: `SAIF.Business.Policy`
- Assembly/package: `SAIF.Business.Policy` (`PolicyCommon`)

## Public members
| Member | Signature | Purpose |
| --- | --- | --- |
| `MaxPolicyEffectiveDate` | `Shared ReadOnly Property MaxPolicyEffectiveDate(inDPI As IDataPortalInfo, inPolicyNumber As Decimal) As Date` | Returns the effective date of a policy's latest period via a correlated self-join subquery (BR-POL-009); a null result causes `CDate` to throw (unhandled).* |
| `PolicyPeriodExpirationDate` | `Shared ReadOnly Property PolicyPeriodExpirationDate(inDPI As IDataPortalInfo, inPolicyNumber As Decimal, inPolicyPeriodEffectiveDate As Date) As Date` | Returns a policy period's expiration date, resolved across WCIS and non-WCIS period stores (BR-POL-010). |
| `AnniversaryRateDate` | `Shared ReadOnly Property AnniversaryRateDate(inDPI As IDataPortalInfo, inPolicyNumber As Decimal, inPolicyPeriodEffectiveDate As Date) As Date` | Returns a policy period's anniversary rating date, resolved across WCIS and non-WCIS period stores (BR-POL-010). |
| `MarketType` | `Shared ReadOnly Property MarketType(inDPI As IDataPortalInfo, inPolicyNumber As Decimal) As Enums.MarketTypes` | Returns the policy's market type, converted from its raw code via `Enums.ConvertMarketType` (BR-POL-004). |
| `MaxPremiumHistorySetId` | `Shared ReadOnly Property MaxPremiumHistorySetId(inDPI As IDataPortalInfo, inPolicyNumber As Decimal, inPolicyPeriodEffectiveDate As Date) As Decimal` | Returns the current premium-history set id, or `0` when none exists (BR-POL-007). |
| `PolicyMinimumPremium` | `Shared ReadOnly Property PolicyMinimumPremium(inDPI As IDataPortalInfo, inPremHistSetID As Decimal) As Decimal` | Returns the minimum premium amount computed by the Oracle package `pk73069_rating_procs.get_minimum_expense_constant`, or `0` if the call fails or returns nothing; failures are silently swallowed by an empty `Catch` (BR-POL-008). |
| `IsInformationPagePrinted` | `Shared ReadOnly Property IsInformationPagePrinted(inDPI As IDataPortalInfo, inPolicyNumber As Decimal, inPolicyPeriodEffectiveDate As Date) As Boolean` | Returns whether a `P401` endorsement with a non-null `printed_date` exists for the policy/period and the returned policy number matches (BR-POL-006); a no-row result causes an unguarded `CDec` conversion to throw rather than returning `False`.* |
| `GetPolicyOwnershipSystem` | `Shared ReadOnly Property GetPolicyOwnershipSystem(inDPI As IDataPortalInfo, inPolicyNumber As Decimal) As Enums.PolicyOwnershipSystems` | Returns whether WCIS or SAIFQuote owns the policy, based on the Oracle function `pk73102_policy.does_wcis_own_submission` (BR-POL-005). |

## Behavioral notes
- The nested `PolicyInformation.SQL` class (`Friend Shared ReadOnly` string properties: `PolicyEffectiveDate`, `PolicyPeriodExpirationDate`, `PolicyPeriodARD`, `GetMarketType`) holds the inline SQL text for four of the members above; it is not part of the public surface.
- `PolicyMinimumPremium` binds an `out_expense_constant_amount` output parameter that is never read back by the caller — a possible latent defect or unused-by-design output.*
- Two Oracle stored routines are invoked (`pk73069_rating_procs.get_minimum_expense_constant`, `pk73102_policy.does_wcis_own_submission`) whose PL/SQL bodies could not be retrieved in this environment; their internal logic and business rules are unverified.**

## Constraints and usage notes
- Every member requires a caller-supplied `IDataPortalInfo`; this class never resolves a connection or database name itself.
- Callers of `MaxPolicyEffectiveDate` and `IsInformationPagePrinted` should be prepared for an unhandled conversion exception on a no-result condition, since neither path guards against a null/`DBNull` scalar result.*

> **Note:** Statements marked with * were inferred from code structure, naming conventions, or
> contextual evidence where direct confirmation was not available in source artifacts. Statements
> marked with ** could not be confirmed; treat as unknown until verified.

## Sources
- SAIF.Business.Policy/PolicyInformation.vb
